/*
package com.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.utils.vo.MatchImageVo;
import com.utils.vo.MatchVisionVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

*/
/**
 * 阿里云 - 视觉搜索
 *
 * 视觉内容搜索：在指定图像、视频或3D模型库中搜索出相同或相似的视觉信息，适用于内容比对、内容精确查找、相似素材搜索等场景
 * @author Howe Hsiang
 * @title: SearchImageUtil
 * @projectName crmeb
 * @Description: 工具类
 * @since 2020/11/30 14:37
 * 更多参数的支持可以参考API说明：https://help.aliyun.com/document_detail/159128.html?spm=a2c4g.11186623.6.715.2c697c1edNt7uW 通过方法重载实现
 *//*

@Slf4j
public class VisionSearchUtil {

    private volatile static IAcsClient client;

    */
/**
     * 单例
     * @return  IAcsClient工具类实例
     *//*

    private static IAcsClient getIAcsClient() {
        if (client == null) {
            synchronized (OSSUtil.class) {
                if (client == null) {
                    DefaultProfile profile = DefaultProfile.getProfile(AliyunConfig.getRegionId(), AliyunConfig.getAccessKeyId(), AliyunConfig.getAccessKeySecret());
                    client = new DefaultAcsClient(profile);
                }
            }
        }
        return client;
    }

    */
/**
     * 组装请求参数
     * @param sysAction
     * @param parameterMap
     * @return
     *//*

    private static CommonRequest assembleCommonRequest(String sysAction, Map<String,Object> parameterMap) {

        CommonRequest commonRequest = new CommonRequest();
        commonRequest.setSysVersion(AliyunConfig.getSysVersion());
        commonRequest.setSysAction(sysAction);
        commonRequest.setSysMethod(MethodType.POST);
        commonRequest.setSysDomain(AliyunConfig.getSysDomain());

        if (null !=parameterMap) {
            log.info("阿里云-视觉搜索-" + sysAction + " BodyParameter请求参数："+JSON.toJSONString(parameterMap));
            for (Map.Entry<String, Object> entry : parameterMap.entrySet()) {
                commonRequest.putBodyParameter(entry.getKey(), entry.getValue());
            }
        }
        return commonRequest;
    }

    */
/**
     * 阿里云-视觉搜索 - 公共接口
     * @param apiName
     * @param sysAction
     * @param parameterMap
     * @return
     *//*

    private static CommonResponse commonSearchVisionApi(String apiName, String sysAction, Map<String,Object> parameterMap) {

        CommonResponse response = null;

        //组装参数
        CommonRequest commonRequest = assembleCommonRequest(sysAction, parameterMap);

        try {
            IAcsClient client = VisionSearchUtil.getIAcsClient();
            response = client.getCommonResponse(commonRequest);
        }catch (ClientException e) {
            log.error("阿里云-视觉搜索-" + apiName + "失败："+"ErrMsg:" + e.getErrMsg(),e);
            log.error("ErrCode:" + e.getErrCode());
            log.error("RequestId:" + e.getRequestId());
            return response;
        }

        log.info("阿里云-视觉搜索-" + apiName + "成功："+response.getData());
        return response;
    }


    */
/**
     * 创建图片数据库
     * @param name 数据库名称
     *//*

    public static void createImageDb(String name){

        Map<String,Object> parameterMap = new HashMap<>(1);
        parameterMap.put("Name", name);
        //调用公共接口
        commonSearchVisionApi("创建图片数据库", "CreateImageDb", parameterMap);
    }


    */
/**
     * 查看数据库的列表
     *//*

    public static void listImageDbs(){

        //调用公共接口
        commonSearchVisionApi("查看数据库的列表", "ListImageDbs", null);
    }


    */
/**
     * 为指定数据库添加图片数据
     * @param entityId 实体ID，可以作为数据分组的ID
     * @param extraData 自定义数据
     * @param imageUrl 图片地址，必须是同Region的OSS图片地址
     *//*

    public static void addImage(String entityId, String extraData, String imageUrl){

        Map<String,Object> parameterMap = new HashMap<>(4);
        parameterMap.put("DbName", AliyunConfig.getDbName());
        parameterMap.put("EntityId", entityId);
        parameterMap.put("ExtraData", extraData);
        parameterMap.put("ImageUrl", imageUrl);

        //调用公共接口
        commonSearchVisionApi("为指定数据库添加图片数据", "AddImage", parameterMap);
    }



    */
/**
     * 数据库中搜索相似的图片
     * @param imageUrl 图片地址，必须是同Region的OSS的图片地址
     * @param limit 获取结果数量上限，取值范围1~1000
     *//*

    public static List<MatchVisionVo> searchImage(String imageUrl, Integer limit){

        Map<String,Object> parameterMap = new HashMap<>(3);
        parameterMap.put("DbName", AliyunConfig.getDbName());
        parameterMap.put("Limit", limit);
        parameterMap.put("ImageUrl", imageUrl);

        //调用公共接口
        CommonResponse response = commonSearchVisionApi("数据库中搜索相似的图片", "SearchImage", parameterMap);

        //解析数据
        if (null != response) {
            String result = response.getData();
            if (StringUtils.isNotBlank(result)) {
                JSONObject JSONObj = (JSONObject) JSONObject.parseObject(result).get("Data");
                if (null != JSONObj) {
                    Object obj = JSONObj.get("MatchList");
                    if (ObjectUtils.isNotEmpty(obj)) {
                        return JSON.parseArray(obj.toString(), MatchVisionVo.class);
                    }
                }
            }
        }

        return null;
    }

    */
/**
     * 删除指定数据库
     * @param dbName 数据库名称
     *//*

    public static void deleteImageDb(String dbName){

        Map<String,Object> parameterMap = new HashMap<>(1);
        parameterMap.put("Name", dbName);

        //调用公共接口
        commonSearchVisionApi("删除指定数据库", "DeleteImageDb", parameterMap);
    }


    */
/**
     * 删除指定数据库中的图片
     * @param entityId 待删除数据的实体ID
     *//*

    public static void deleteImage(String entityId){

        Map<String,Object> parameterMap = new HashMap<>(2);
        parameterMap.put("DbName", AliyunConfig.getDbName());
        parameterMap.put("EntityId", entityId);

        //调用公共接口
        commonSearchVisionApi("删除指定数据库中的图片", "DeleteImage", parameterMap);
    }


    */
/**
     * 查看指定数据库中的图片数据列表
     * @param dbName 数据库名称
     *//*

    public static void listImages(String dbName){

        Map<String,Object> parameterMap = new HashMap<>(1);
        parameterMap.put("DbName", dbName);

        //调用公共接口
        commonSearchVisionApi("查看指定数据库中的图片数据列表", "ListImages", parameterMap);
    }


    */
/**
     * 测试
     * @param args
     *//*

    public static void main(String[] args) {

        String imageUrl1 = "https://italytao.oss-cn-shanghai.aliyuncs.com/uploadfile/593188 310B2 1000.jpg";

        //查看数据库的列表
        listImageDbs();

        //查看图片数据列表
        //listImages(dbName);

        //创建图片数据库
        //createImageDb("search_image_db");

        //删除指定数据库
        //deleteImageDb(dbName);

        //添加图片数据
        //addImage("1","图搜图片1",imageUrl);

        //删除图片
        //deleteImage("227507");

        //搜索图片
        //searchImage(imageUrl1,2);
    }

}
*/
